import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import top.zackyoung.mybatisplus.entity.BaseEntity;

import java.util.Scanner;

/**
 * @version 1.0
 * @description:
 * @author: ZackYoung
 * @date: 2021/5/2 11:00
 */
public class GeneratorMain {
    public static void main(String[] args) {
        System.out.println("请输入路径：直到src/main/java");
        Scanner scanner = new Scanner(System.in);
        String path = scanner.next();
        System.out.println("请输入要生成的表");
        String table = scanner.next();

        // 全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setAuthor("zackYoung") // 作者
                .setOutputDir(path) // 生成路径
                .setFileOverride(true)  // 若多次生成，则文件覆盖
                .setIdType(IdType.AUTO) // 主键策略
                .setServiceName("%sService") // 设置生成的service接口名不携带首字母I --> IEmployeeService
                .setBaseResultMap(true)
                .setActiveRecord(true)
                .setBaseColumnList(true);    // 生成sql片段
        // 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)    // 设置数据库类型
                .setDriverName("com.mysql.cj.jdbc.Driver")
                .setUrl("jdbc:mysql:///shop?serverTimezone=Asia/Shanghai")
                .setUsername("root")
                .setPassword("1052455797");
        // 策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true) // 开启全局大写命名
                .setEntityLombokModel(true)
                .setSuperEntityClass(BaseEntity.class)
                .setColumnNaming(NamingStrategy.underline_to_camel) // 设置字段名与属性的驼峰命名映射
//                .setTablePrefix("tbl_") // 设置表名前缀
                .setInclude(table); // 作用于哪张表
        // 包名配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("top.zackyoung.mybatisplus.query") // 设置父包名
                .setMapper("mapper") // 设置Mapper接口生成的位置
                .setService("service") // 设置Service生成的位置
                .setController("controller") // 设置Controller生成的位置
                .setEntity("entity") // 设置实体类生成的位置
                .setXml("mapper"); // 设置Mapper映射文件生成的位置
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setEntity("/entity.java.vm");
        // 整合配置
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(globalConfig)
                .setTemplate(templateConfig)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig);

        // 执行
        autoGenerator.execute();
    }
}
